package com.wyd.observer.demo03;

import java.util.Observable;

/**
 * 观察者模式
 *
 * 当状态发生变化时，将通知所有已注册的观察者
 *
 * 发布者核心方法：
 * 添加观察者    addObserver()
 * 删除观察者    removeOberver()
 * 通知观察者    notifyObserver()
 *
 * 观察者核心方法：
 * 接到通知后，做出相应   update()
 *
 * @author Yudi Wang
 * @date 2022/1/6 11:17
 */
public class WeatherData extends Observable {

    private int temperature;

    private int pressure;

    /**
     * 便于观察者自行获取数据
     *
     * @return
     */
    public int getTemperature() {
        return temperature;
    }

    public int getPressure() {
        return pressure;
    }

    /**
     * 模拟监测值发生变化
     *
     * @param temperature
     * @param pressure
     */
    public void setMessureData(int temperature, int pressure) {
        this.temperature = temperature;
        this.pressure = pressure;
        messureDataChanged();
    }

    /**
     * 监测值发生变化时调用
     */
    private void messureDataChanged() {
        setChanged();
        notifyObservers();
    }

    public static void main(String[] args) {
        /**
         * 发布者
         */
        WeatherData weatherData = new WeatherData();
        /**
         * 实例化，并注册
         */
        PressureDisplay pressureDisplay = new PressureDisplay(weatherData);
        TemperatureDisplay temperatureDisplay = new TemperatureDisplay(weatherData);
        /**
         * 模拟监测值发生变化
         * 相关看板应该同步显示变化的监测值
         */
        weatherData.setMessureData(22, 101010);
    }
}
